#_*_coding:utf-8_*_
#@author:侯松林

'''
2. 以Lena为原始图像，通过OpenCV使用Sobel及Canny算子检测，比较边缘检测结果。
'''
import numpy as np
import cv2



# 读取图像
imgSrc = cv2.imread(r'lena.jpg')
cv2.imshow("imgSrc",imgSrc)

# 转化为灰度图像
img_gray = cv2.cvtColor(imgSrc,cv2.COLOR_BGR2GRAY)
cv2.imshow("img_gray",img_gray)

#sobel边缘检测
sobel_x = cv2.Sobel(img_gray,cv2.CV_8U,1,0,ksize=3)
sobel_y = cv2.Sobel(img_gray,cv2.CV_8U,0,1,ksize=3)
sobel = cv2.Sobel(img_gray,cv2.CV_8U,1,1,ksize=3)

cv2.imshow("sobel_x",sobel_x)
cv2.imshow("sobel_y",sobel_y)
cv2.imshow("sobel",sobel)

#canny边缘检测
canny = cv2.Canny(img_gray,100,200)
cv2.imshow("canny",canny)
'''
结论：
sobel边缘检测，通常有水平和垂直两种算子，对噪声点比较敏感，有很多误判点。
canny边缘检测，检测到的边缘清晰，可以通过不同的阈值控制对一些边缘进行取舍，对噪声点或者虚假边缘有较好地屏蔽作用。
'''

cv2.waitKey()
cv2.destroyAllWindows()